package com.mazaiting.redeye.utils;

import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;

import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;

/***
 *
 *
 *                                                    __----~~~~~~~~~~~------___
 *                                   .  .   ~~//====......          __--~ ~~
 *                   -.            \_|//     |||\\  ~~~~~~::::... /~
 *                ___-==_       _-~o~  \/    |||  \\            _/~~-
 *        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
 *    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
 *  .~       .~       |   \\ -_    /  /-   /   ||      \   /
 * /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
 * |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
 *          '         ~-|      /|    |-~\~~       __--~~
 *                      |-~~-_/ |    |   ~\_   _-~            /\
 *                           /  \     \__   \/~                \__
 *                       _--~ _/ | .-~~____--~-/                  ~~==.
 *                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
 *                                 -_     ~\      ~~---l__i__i__i--~~_/
 *                                 _-~-__   ~)  \--______________--~~
 *                               //.-~~~-~_--~- |-------~~~~~~~~
 *                                      //.-~~~--\
 *                               神兽保佑
 *                              代码无BUG!
 * @author mazaiting
 * @date 2019-07-02
 * @decription 文件操作工具类
 */
public class FileUtils {


    /**
     * 获取文件格式
     *
     * @param file 文件
     * @return 格式
     */
    public static String getFormatName(MultipartFile file) {
        // 格式名
        String formatName;
        try {
            formatName = getFormatName(file.getInputStream());
        } catch (IOException e) {
            e.printStackTrace();
            // 文件名
            String filename = file.getOriginalFilename();
            if (StringUtils.isEmpty(filename)) {
                formatName = ".jpg";
            } else {
                String[] strings = filename.split(".");
                if (strings.length > 0) {
                    formatName = strings[strings.length - 1];
                } else {
                    formatName = ".jpg";
                }
            }
        }
        return formatName.toLowerCase();
    }

    /**
     * 获取图片文件格式
     * @param inputStream 输入流
     * @return 图片格式
     * @throws IOException IO 异常
     */
    public static String getFormatName(InputStream inputStream) throws IOException {
        // 创建图片输入流
        ImageInputStream iis = ImageIO.createImageInputStream(inputStream);
        // 创建图片读取工具
        Iterator<ImageReader> imageReaders = ImageIO.getImageReaders(iis);
        // 检测是否为空
        if (!imageReaders.hasNext()) {
            throw new RuntimeException("No readers found!");
        }

        // 获取第一个 Reader
        ImageReader reader = imageReaders.next();
        // 关闭
        iis.close();
        // 获取图片格式
        return reader.getFormatName();
    }

}
